/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package fr.uniscol;

import fr.uniscol.dao.IReferenceMatieresDao;
import fr.uniscol.editors.MatierePropertyEditor;
import fr.uniscol.editors.StructurePropertyEditor;
import fr.uniscol.model.Classe;
import fr.uniscol.model.Enseignant;
import fr.uniscol.model.Groupe;
import fr.uniscol.model.IUniscolUser;
import fr.uniscol.model.Matiere;
import fr.uniscol.model.ServiceEnseignant;
import fr.uniscol.mvc.SessionExpireeException;
import fr.uniscol.service.IClasseService;
import fr.uniscol.service.IEnseignantService;
import fr.uniscol.service.IGroupeService;
import fr.uniscol.service.IReferenceMatieresService;
import java.util.List;
import javax.servlet.http.HttpSession;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

/**
 *
 * @author Christophe
 */
@Controller
public class ServiceEnseignantController extends UniscolMainController{
    
    public static Logger log = Logger.getLogger(ServiceEnseignantController.class);
    
    @Autowired
    private IReferenceMatieresService referenceMatieresService;
    
    @Autowired
    private IEnseignantService enseignantService;
    
    @Autowired
    private IGroupeService groupeService;
    
    @InitBinder
    public void initBinder(WebDataBinder binder){
        binder.registerCustomEditor(Matiere.class, new MatierePropertyEditor());
        binder.registerCustomEditor(Classe.class, new StructurePropertyEditor());
    }
    
    @RequestMapping("/service.enseignant.create")
    public ModelAndView createServiceEnseignant(@RequestParam("enseignantid") long enseignantId, Model model, HttpSession session){

        Enseignant enseignant = enseignantService.getEnseignantById(enseignantId);
        
        ServiceEnseignant service = new ServiceEnseignant();
        service.setEnseignant(enseignant);
        model.addAttribute("service", service);
        
        List<Groupe> structures = groupeService.getAllGroupesOfEtablissement(getUtilisateur(session).getBaseSelectionnee());
        model.addAttribute("structures", structures);
        
        List<Matiere> matieres = referenceMatieresService.findAllMatieres(getUtilisateur(session).getBaseSelectionnee());
        model.addAttribute("matieres", matieres);
        
        return new ModelAndView("forms/serviceEnseignantForm", model.asMap());
    }
    
    @RequestMapping(value = "/service.enseignant.save", method = RequestMethod.POST)
    public String saveServiceEnseignant(@RequestParam("enseignant.id") long enseignantId, @ModelAttribute("service") ServiceEnseignant service, HttpSession session){
        
        log.debug("SERVICEID=" + service.getId());
        log.debug("MATIEREID=" + service.getMatiere());
        log.debug("STRUCTURE=" + service.getGroupe());
        
        Enseignant enseignant = new Enseignant();
        enseignant.setId(enseignantId);
        enseignant.setBase(getUtilisateur(session).getBaseSelectionnee());
        service.setEnseignant(enseignant);
        
        if(enseignantService.saveServiceEnseignant(service)){
            alertSuccess("service.enseignant.ok", "Le service a été enregistré avec succès", session);
        }else{
            alertError("service.enseignant.nok", "Le service n'a pas été enregistré", session);
        }
        
        return "redirect:enseignant.edit?enseignantid=" + enseignantId;
    }
}
